package org.pan.service;

import org.pan.domain.PageParameter;
import org.pan.domain.PageResult;
import org.pan.domain.db.*;

import java.util.List;
import java.util.Set;

/**
 * 系统用户角色菜单service
 * Created by Administrator on 2015/11/9.
 */
public interface SystemService {

    /**
     * 保存系统角色
     * @param systemRole 系统角色
     * @return 系统角色id
     */
    Long saveSystemRole(SystemRole systemRole);

    /**
     * 保存系统菜单
     * @param systemMenu 系统菜单
     * @return 系统菜单id
     */
    Long saveSystemMenu(SystemMenu systemMenu);

    /**
     * 保存系统登录账户
     * @param systemAccount 系统登录账户
     * @return 系统登录账户id
     */
    Long saveSystemAccount(SystemAccount systemAccount);

    /**
     * 根据id获取系统菜单
     * @param roleId 系统角色id
     * @return 系统角色
     */
    SystemRole getSystemRoleById(Long roleId);

    /**
     * 根据id获取系统菜单
     * @param menuId 系统菜单id
     * @return 系统菜单
     */
    SystemMenu getSystemMenuById(Long menuId);

    /**
     * 根据id获取系统登录账户
     * @param accountId 系统登录账户id
     * @return 系统登录账户
     */
    SystemAccount getSystemAccountById(Long accountId);

    /**
     * 根据角色id获取所拥有的菜单列表
     * @param roleId 系统角色id
     * @return 菜单列表
     */
    Set<SystemMenu> getSystemMenuListByRoleId(Long roleId);

    /**
     * 根据账户id获取所拥有的菜单列表
     * @param accountId 系统登录账户id
     * @return 菜果列表
     */
    Set<SystemMenu> getSystemMenuListByAccountId(Long accountId);

    /**
     * 获取所有系统菜单列表
     * @return 系统菜单列表
     */
    Set<SystemMenu> getSystemMenuList();

    /**
     * 系统角色分页
     * @param pageParameter 分页参数
     * @return 分页结果
     */
    PageResult getSystemRolePageList(PageParameter pageParameter);

    /**
     * 系统登录账户分页
     * @param pageParameter 分页参数
     * @return 分页结果
     */
    PageResult getSystemAccountPageList(PageParameter pageParameter);

    /**
     * 更新系统角色拥有菜单
     * @param roleId 系统角色id
     * @param menuIdList 系统菜单id列表
     */
    void updateSystemRoleMenu(Long roleId,List<Long> menuIdList);

    /**
     * 更新系统登录账户拥有角色
     * @param accountId 系统登录账户id
     * @param roleIdList 系统角色id列表
     */
    void updateSystemAccountRole(Long accountId,List<Long> roleIdList);

    /**
     * 根据id删除系统角色
     * @param roleId 系统角色id
     */
    void removeSystemRole(Long roleId);

    /**
     * 根据id删除系统菜单
     * @param menuId 系统菜单id
     */
    void removeSystemMenu(Long menuId);

    /**
     * 根据id删除系统登录账户
     * @param accountId 系统账户id
     */
    void removeSystemAccount(Long accountId);
}
